In order to read or write data to a hard disk, the disk micro-controller must first physically position the disk head at the appropriate place on the disk platter(s) where the data is to be read or written. During this time, no data transfer can happen, and seek time is essentially wasted time. Thus, the management of seek time is an important factor in the overall throughput of read and write operations to a hard disk.
A number of techniques have been proposed or suggested for the management of seek time. For example, the total amount of seek time can be minimized by ensuring that each read or write operation transfers a large amount of data. Although this technique reduces the number of disk seeks required, and improves overall throughput, it is often impractical. A number of hard disk controllers employ a cache memory to improve the performance of read and write operations. The goal of the cache memory is to hide the disk seek time by effectively re-ordering read and write operations so that consecutive operations require little or no seek time.
Data from incoming write operations are usually written to the cache first, and then written to the disk at an appropriate time. This allows the micro-controller to re-order the write operations and change the timing of the write operations to minimize the disk seek time and thereby improve the overall throughput. For example, operations that physically access “similar locations” on the disk should be grouped together.
The use of the cache for read operations is also important. Typically, the disk micro-controller will observe the pattern of read operations, predict likely future read requests, and then speculatively (and efficiently) read large chunks of data into the cache when the disk is otherwise idle. The cache is usually managed as a set of “segments,” with each segment having a specific purpose and being managed independently.
This speculative read-ahead works especially well when a single stream of data is read from consecutive sectors on the disk. The disk seek time is minimized and the performance approaches the maximum theoretical disk bandwidth. If a second stream of consecutive sector reads is added, however, the performance often drops significantly, depending on the transfer size of each operation. For example, if a request for a first stream is received, the controller will move the head to read the data from the first stream and then read and return the data for the first stream. Thereafter, the controller is idle and will start a speculative read of data for the first stream. Meanwhile, assume that a request for a second stream is received during the speculative read of the first stream. The controller will abort the speculative request (since actual requests take precedence over speculative reads), move the head to read the data from the second stream and then read and return the data for the second stream.
The disk will keep moving the head from one position to another in this manner as it aborts speculative read operations in favor of actual requests. Thus, the aborted speculative read ahead operations will be ineffective towards minimizing disk seek time. In effect, the disk seek time will dominate and the benefit of the read cache is significantly impaired. A need therefore exists for methods and apparatus for reducing disk seek time to improve the overall throughput. A further need exists for methods and apparatus for scheduling read requests.